home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / faq / wdj0597.zip / NEWCOMB.ZIP / C / WDJSRCH.C < prev   
C/C++ Source or Header  |  1996-11-11  |  2KB  |  84 lines

  1. //
  2. // WDJ Search Example
  3. //
  4. #include "windows.h"
  5. #include "stdio.h"
  6. #include "io.h"
  7. #include "string.h"
  8.  
  9. static volatile char s_cancel;        // Cancel the current search
  10.                                              
  11. #define VBTRUE    (-1)        // VB uses -1 and 0
  12. #define VBFALSE    (0) 
  13.  
  14. #define MAXLINE    256            // Maximum line/search size
  15. #define INFINT  200            // Send prog. info every INFINT lines
  16.  
  17. #define EXPORT    _export _far _pascal
  18.  
  19. //
  20. // Private message definitions
  21. #define PM_PROG (WM_USER + 1)    // Progress Report
  22. #define PM_FND    (WM_USER + 2)    // Text Found
  23.  
  24. //
  25. // Search a file for a text
  26. //
  27. // Returns TRUE for success, false for error.
  28. //
  29.  
  30. short EXPORT SrchFile(
  31. HWND owner,                    // Window to get messages
  32. const char *filename,        // File to search
  33. const char *srchtext)        // Text to search for
  34. {
  35.     FILE *sf;                // File we're searching
  36.     char stext[MAXLINE];    // UC version of search text
  37.     char inbuf[MAXLINE];    // Input line
  38.     long lct = 0;            // Line counter
  39.     long flen;                // File size
  40.     
  41. if ((sf = fopen(filename, "r")) == NULL)
  42.     return(VBFALSE);
  43.     
  44. flen = _filelength(_fileno(sf));    // Read the file size
  45.     
  46. strcpy(stext, srchtext);
  47. strupr(stext);
  48.  
  49. s_cancel = 0;                    // Start with cancel off
  50.  
  51. while (!s_cancel && fgets(inbuf, sizeof(inbuf), sf) != NULL) {
  52.     
  53.     if (lct++ % INFINT == 0) {        // Snd prog. every INFINT
  54.         SendMessage(owner, PM_PROG, // Progress is sent as WPARAM
  55.             (WPARAM) (ftell(sf) * 100L / flen), 0);
  56.         Yield();                    // Yield to other Win3x apps
  57.         }
  58.         
  59.     if (strstr(strupr(inbuf), stext) != NULL)     // Text found
  60.         SendMessage(owner, PM_FND,
  61.             0, lct);                // Send "found" line as LPARAM
  62.  
  63.     }
  64.     
  65. fclose(sf);
  66.  
  67. return(VBTRUE); 
  68. }
  69.  
  70.  
  71.  
  72. //
  73. // Cancel function
  74. //
  75. // Sets the cancel flag when called
  76. //
  77.  
  78. void EXPORT SrchCancel(void)
  79. {
  80.  
  81. s_cancel = 1;
  82.  
  83. }
  84.